#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
HAI优化系统配置文件
"""

import os
from typing import Dict, Any, List

# 腾讯云配置 - 动态读取环境变量
def get_tencent_config():
    """动态获取腾讯云配置"""
    return {
        'secret_id': os.getenv('TENCENT_SECRET_ID', ''),
        'secret_key': os.getenv('TENCENT_SECRET_KEY', ''),
        'region': os.getenv('TENCENT_REGION', 'ap-beijing'),
        'logset_id': os.getenv('TENCENT_LOG_SET_ID', ''),
        'topic_id': os.getenv('TENCENT_LOG_TOPIC_ID', '')
    }

TENCENT_CONFIG = get_tencent_config()

# 地域配置
REGIONS_CONFIG = {
    'priority_regions': [
        'ap-beijing',      # 北京
        'ap-nanjing',      # 南京
        'ap-guangzhou',    # 广州
        'ap-shanghai',     # 上海
        'ap-chongqing',    # 重庆
        'ap-chengdu'       # 成都
    ],
    'preconfigure_regions': [
        'ap-beijing',
        'ap-nanjing',
        'ap-guangzhou',
        'ap-shanghai',
        'ap-chongqing',
        'ap-chengdu'
    ]
}

# GPU类型配置（按成本从低到高）
GPU_TYPES_CONFIG = {
    'cost_order': [
        'basic',      # 最便宜
        'standard',
        'performance',
        'advanced',
        'premium'     # 最贵
    ],
    'default_type': 'basic',
    'max_concurrent_tasks': {
        'basic': 10,
        'standard': 15,
        'performance': 20,
        'advanced': 25,
        'premium': 30
    }
}

# 用户识别配置
USER_IDENTIFICATION_CONFIG = {
    'window_size_seconds': 3600,  # 1小时时间窗口
    'cleanup_interval': 7200,     # 2小时清理一次过期用户
    'max_user_cache_size': 10000  # 最大用户缓存数量
}

# 公平队列配置
FAIR_QUEUE_CONFIG = {
    'max_queue_size': 1000,       # 最大队列大小
    'task_timeout': 300,          # 任务超时时间（秒）
    'cleanup_interval': 600       # 清理间隔（秒）
}

# 负载均衡配置
LOAD_BALANCER_CONFIG = {
    'health_check_interval': 30,  # 健康检查间隔（秒）
    'max_retry_count': 3,         # 最大重试次数
    'retry_delay': 5              # 重试延迟（秒）
}

# 扩缩容配置
AUTO_SCALING_CONFIG = {
    # 扩容触发条件
    'scale_out': {
        'response_time_threshold': 1.0,      # 平均响应时间 > 1秒
        'queue_backlog_threshold': 5,        # 任务队列积压 > 5个
        'cpu_utilization_threshold': 70.0,   # 服务器CPU利用率 > 70%
        'max_wait_time_threshold': 5.0       # 用户最大等待时间 > 5秒
    },
    # 缩容触发条件
    'scale_in': {
        'response_time_threshold': 1.0,      # 平均响应时间 < 1秒
        'queue_backlog_threshold': 3,        # 任务队列 < 3个
        'cpu_utilization_threshold': 30.0,   # 服务器CPU利用率 < 30%
        'low_load_duration_threshold': 300   # 低负载状态持续 > 5分钟
    },
    # 其他配置
    'min_servers': 1,                        # 最少服务器数量
    'max_servers': 100,                      # 最大服务器数量
    'cooldown_period': 60,                   # 扩缩容冷却期（秒）
    'metrics_window_size': 10,               # 指标窗口大小
    'scaling_confidence_threshold': 0.3      # 决策置信度阈值
}

# 流量监控配置
TRAFFIC_MONITORING_CONFIG = {
    'warning_threshold_gb': 400,             # 警告阈值（GB）
    'critical_threshold_gb': 450,            # 严重阈值（GB）
    'emergency_threshold_gb': 480,           # 紧急阈值（GB）
    'monthly_limit_gb': 500,                 # 月度限制（GB）
    'check_interval': 600,                   # 检查间隔（秒）
    'optimization_threshold_gb': 300         # 优化触发阈值（GB）
}

# 日志配置
LOGGING_CONFIG = {
    'log_dir': 'logs',
    'max_file_size': 100 * 1024 * 1024,     # 100MB
    'backup_count': 10,
    'log_level': 'INFO',
    'enable_cls': True,                      # 是否启用腾讯云CLS
    'cleanup_days': 30                       # 日志保留天数
}

# 监控配置
MONITORING_CONFIG = {
    'metrics_collection_interval': 10,       # 指标收集间隔（秒）
    'health_check_interval': 30,             # 健康检查间隔（秒）
    'alert_check_interval': 60,              # 报警检查间隔（秒）
    'report_generation_interval': 3600       # 报告生成间隔（秒）
}

# 性能配置
PERFORMANCE_CONFIG = {
    'max_concurrent_requests': 200,          # 最大并发请求数 - 支持大规模部署
    'request_timeout': 60,                   # 请求超时时间（秒） - 增加超时时间
    'connection_pool_size': 50,              # 连接池大小 - 增加连接池
    'keep_alive_timeout': 120                # Keep-Alive超时时间（秒） - 增加超时时间
}

# 安全配置
SECURITY_CONFIG = {
    'enable_rate_limiting': True,            # 启用限流
    'rate_limit_per_minute': 200,            # 每分钟限流数量 - 支持大规模部署
    'enable_ip_whitelist': False,            # 启用IP白名单
    'ip_whitelist': [],                      # IP白名单
    'enable_authentication': False,          # 启用身份验证
    'api_key_required': False                # 是否需要API密钥
}

# API网关自动注册配置
API_GATEWAY_REGISTRATION_CONFIG = {
    'enabled': True,                         # 启用自动注册
    'gateway_url': 'https://gongjuxiang.work',  # API网关URL
    'server_port': 8080,                     # HAI优化系统端口
    'secret': 'gpu-server-register-to-api-gateway-2024',  # 注册密钥
    'max_attempts': 10,                      # 最大尝试次数
    'retry_interval': 30,                    # 重试间隔（秒）
    'auto_retry_on_failure': True,           # 失败后自动重试
    'health_check_interval': 60              # 健康检查间隔（秒）
}

# 系统配置
SYSTEM_CONFIG = {
    'debug_mode': os.getenv('DEBUG', 'false').lower() == 'true',
    'enable_metrics': True,                  # 启用指标收集
    'enable_alerts': True,                   # 启用报警
    'enable_auto_scaling': True,             # 启用自动扩缩容
    'enable_preconfiguration': True,         # 启用预配置
    'enable_api_gateway_auto_registration': True,  # 启用API网关自动注册
    'startup_delay': 5                       # 启动延迟（秒）
}

# 将所有配置合并 - 动态获取腾讯云配置
def get_full_config():
    """获取完整配置，动态读取环境变量"""
    return {
        'tencent': get_tencent_config(),
        'regions': REGIONS_CONFIG,
        'gpu_types': GPU_TYPES_CONFIG,
        'user_identification': USER_IDENTIFICATION_CONFIG,
        'fair_queue': FAIR_QUEUE_CONFIG,
        'load_balancer': LOAD_BALANCER_CONFIG,
        'auto_scaling': AUTO_SCALING_CONFIG,
        'traffic_monitoring': TRAFFIC_MONITORING_CONFIG,
        'logging': LOGGING_CONFIG,
        'monitoring': MONITORING_CONFIG,
        'performance': PERFORMANCE_CONFIG,
        'security': SECURITY_CONFIG,
        'api_gateway_registration': API_GATEWAY_REGISTRATION_CONFIG,
        'system': SYSTEM_CONFIG
    }

CONFIG = get_full_config()

def get_config(section: str = None) -> Dict[str, Any]:
    """
    获取配置 - 动态获取最新配置
    
    Args:
        section: 配置节名称，如果为None则返回所有配置
        
    Returns:
        配置字典
    """
    # 动态获取最新配置
    current_config = get_full_config()
    if section:
        return current_config.get(section, {})
    return current_config

def update_config(section: str, key: str, value: Any) -> None:
    """
    更新配置
    
    Args:
        section: 配置节名称
        key: 配置键
        value: 配置值
    """
    if section in CONFIG:
        CONFIG[section][key] = value

def validate_config() -> List[str]:
    """
    验证配置 - 使用动态配置
    
    Returns:
        验证错误列表
    """
    errors = []
    
    # 验证腾讯云配置 - 动态获取
    tencent_config = get_tencent_config()
    if not tencent_config['secret_id']:
        errors.append("腾讯云SecretId未配置")
    if not tencent_config['secret_key']:
        errors.append("腾讯云SecretKey未配置")
    
    # 验证地域配置
    regions_config = CONFIG['regions']
    if not regions_config['priority_regions']:
        errors.append("优先地域列表为空")
    
    # 验证GPU类型配置
    gpu_config = CONFIG['gpu_types']
    if not gpu_config['cost_order']:
        errors.append("GPU类型成本排序为空")
    
    # 验证扩缩容配置
    scaling_config = CONFIG['auto_scaling']
    if scaling_config['min_servers'] < 1:
        errors.append("最少服务器数量不能小于1")
    if scaling_config['max_servers'] < scaling_config['min_servers']:
        errors.append("最大服务器数量不能小于最少服务器数量")
    
    return errors

if __name__ == "__main__":
    # 配置验证测试
    errors = validate_config()
    if errors:
        print("配置验证失败:")
        for error in errors:
            print(f"  - {error}")
    else:
        print("配置验证通过")
    
    # 打印当前配置
    print("\n当前配置:")
    import json
    print(json.dumps(CONFIG, indent=2, ensure_ascii=False))
